#ifndef CHT8305_CHT8310_H
#define CHT8305_CHT8310_H

//---------------------------------------------------------------------------------
#include "main.h"    // 包含主程序头文件，可能包含全局变量、函数声明等
#include "stdbool.h" // 包含布尔类型定义
#include "string.h"  // 包含字符串处理函数
//---------------------------------------------------------------------------------
//------------------------------
// 寄存器地址
//------------------------------
//---------------------------------------------------
#define REG_CHT8305_TEMP 0x00       // CHT8305温度寄存器地址
#define REG_CHT8305_HUMI 0x01       // CHT8305湿度寄存器地址
#define REG_CHT8305_CONFIG 0x02     // CHT8305配置寄存器地址
#define REG_CHT8305_ALT 0x03        // CHT8305备用寄存器地址
#define REG_CHT8305_MANUF_ID 0xFE   // CHT8305制造商ID寄存器地址
#define REG_CHT8305_VERSION_ID 0xFF // CHT8305版本ID寄存器地址
//---------------------------------------------------
#define CHT8305_MANUF_ID 0x5959   // CHT8305制造商ID
#define CHT8305_VERSION_ID 0x8305 // CHT8305版本ID
//---------------------------------------------------
#define REG_CHT8310_TEMP 0x00            // CHT8310温度寄存器地址
#define REG_CHT8310_HUMI 0x01            // CHT8310湿度寄存器地址
#define REG_CHT8310_STATUS 0x02          // CHT8310状态寄存器地址
#define REG_CHT8310_CONFIG 0x03          // CHT8310配置寄存器地址
#define REG_CHT8310_CONVERT_RATE 0x04    // CHT8310转换速率寄存器地址
#define REG_CHT8310_TEMP_HIGH_LIMIT 0x05 // CHT8310温度高阈值寄存器地址
#define REG_CHT8310_TEMP_LOW_LIMIT 0x06  // CHT8310温度低阈值寄存器地址
#define REG_CHT8310_HUMI_HIGH_LIMIT 0x07 // CHT8310湿度高阈值寄存器地址
#define REG_CHT8310_HUMI_LOW_LIMIT 0x08  // CHT8310湿度低阈值寄存器地址
#define REG_CHT8310_ONES_SHOT 0x0F       // CHT8310单次测量寄存器地址
#define REG_CHT8310_SWRST 0xFC           // CHT8310软件复位寄存器地址
#define REG_CHT8310_MANUF_ID 0xFE        // CHT8310制造商ID寄存器地址
#define REG_CHT8310_VERSION_ID 0xFF      // CHT8310版本ID寄存器地址
//---------------------------------------------------
#define CHT8310_MANUF_ID 0x5959   // CHT8310制造商ID
#define CHT8310_VERSION_ID 0x8215 // CHT8310版本ID
//---------------------------------------------------------------------------------
//------------------------------
// 传感器型号定义
//------------------------------
typedef enum
{
    SENSOR_UNKNOWN = 0, // 未知传感器型号
    SENSOR_CHT8305C,    // CHT8305C传感器型号
    SENSOR_CHT8310      // CHT8310传感器型号
} sensor_model_t;       // 传感器型号枚举类型

// CHT8310配置寄存器MSB（高字节）位域结构
typedef struct
{
    uint8_t EHT : 1;      // 使能高阈值报警
    uint8_t reserved : 3; // 保留位
    uint8_t EM : 1;       // 使能测量
    uint8_t ALTH : 1;     // 使能低阈值报警
    uint8_t SD : 1;       // 使能睡眠模式
    uint8_t Mask : 1;     // 报警掩码
} cht8310_config_msb_t;

// CHT8310配置寄存器LSB（低字节）位域结构
typedef struct
{
    uint8_t ATM : 1;       // 自动测量模式
    uint8_t CONSEC_FQ : 2; // 连续测量频率
    uint8_t ALT_SRC : 2;   // 报警源选择
    uint8_t POL : 1;       // 报警极性
    uint8_t reserved : 1;  // 保留位
    uint8_t TME : 1;       // 测量使能
} cht8310_config_lsb_t;

// CHT8310配置寄存器MSB联合体
typedef union
{
    uint8_t value;            // 配置寄存器MSB值
    cht8310_config_msb_t bit; // 配置寄存器MSB位域
} cht8310_config_msb_union_t;

// CHT8310配置寄存器LSB联合体
typedef union
{
    uint8_t value;            // 配置寄存器LSB值
    cht8310_config_lsb_t bit; // 配置寄存器LSB位域
} cht8310_config_lsb_union_t;
//------------------------------
// 传感器上下文结构体
typedef struct
{
    uint8_t i2c_addr_7bit;                 // 7位I2C地址
    sensor_model_t model;                  // 传感器型号
    uint16_t version_id;                   // 版本ID
    uint16_t manufacture_id;               // 制造商ID
    bool is_initialized;                   // 是否已初始化
    cht8310_config_msb_union_t config_msb; // 配置寄存器MSB
    cht8310_config_lsb_union_t config_lsb; // 配置寄存器LSB
} sensor_ctx_t;
//---------------------------------------------------------------------------------

/**
 * @brief  传感器初始化入口函数
 * @retval bool true-成功 false-失败
 * @note   执行流程：
 *         1. 检测传感器型号
 *         2. 型号特定配置
 *         3. 验证初始化状态
 */
bool cht8305_8310_sensor_init(void);

/**
 * @brief  获取最新温湿度数据
 * @param  temp   温度输出指针（单位℃）
 * @param  humid  湿度输出指针（单位%RH）
 * @note   典型调用周期建议≥1秒（取决于传感器转换时间）
 */
void get_cht8305_8310_temp_humi(float *temp, float *humi);

//---------------------------------------------------------------------------------

#endif
